package com.xbongbong.paas.domain.entity;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.enums.DelEnum;
import com.xbongbong.paas.toolbox.util.DateTimeUtil;
import com.xbongbong.paas.toolbox.wrap.Entity;
import com.xbongbong.paas.toolbox.wrap.QueryIgnore;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * 阶段实体
 * @author 李少杰
 * @version v1.0.0
 * @date 2021/11/17 14:33
 */
@Getter
@Setter
@ToString
public class PaasStageEntity extends Entity {

    /**
     * 主键
     */
    private Long id;
    /**
     * 公司id
     */
    private String corpid;
    /**
     * 表单id
     */
    private Long formId;
    /**
     * 关联阶段流程id
     */
    private Long stageProcessId;
    /**
     * 阶段名称
     */
    private String name;
    /**
     * 阶段code
     */
    private String code;
    /**
     * 阶段进入比例
     */
    private Integer intoProportion;
    /**
     * 阶段跳出比例
     */
    private Integer outProportion;
    /**
     * 阶段类型【0普通流程阶段、1结束阶段-成功、2结束阶段-失败】
     */
    private Integer type;
    /**
     * 阶段是否启用（0不启用、1启用）
     */
    private Integer enable;
    /**
     * 阶段排序【sort值越大代表阶段越靠前】
     */
    private Integer sort;
    /**
     * 阶段停留限制【0无时间限制、1停留多少时间后超时】
     */
    private Integer stayLimit;
    /**
     * 阶段停留限制时长
     */
    private Integer stayLimitTime;
    /**
     * 阶段停留限制时长单位【1时、2天、3周、4月】
     */
    private Integer stayLimitTimeUnit;
    /**
     * 超时预警颜色是否开启【0关闭、1打开】
     */
    private Integer enableStageWarningColor;
    /**
     * 超时预警颜色
     */
    private String stageWarningColor;
    /**
     * 阶段推进人，空值代表所有人都允许推进
     */
    private JSONArray executor;
    /**
     * 阶段进入条件
     */
    private String preConditions;
    /**
     * 是否允许跳过阶段（0不允许、1允许）
     */
    private Integer allowSkipStage;
    /**
     * 是否关联业务状态（0没有关联、1有关联）
     */
    private Integer openStatus;
    /**
     * 关联业务的哪个状态
     */
    private Integer businessRelatedStatus;
    /**
     * 特殊业务的特殊阶段的额外设置
     */
    private JSONObject extraSetting;
    /**
     * 是否允许重新激活阶段流程（0不允许、1允许）
     */
    private Integer allowReactive;
    /**
     * 允许重新激活阶段流程到哪些阶段
     */
    private JSONArray allowReactiveStage;
    /**
     * 是否必填任务完成后自动跳入下一阶段（0否、1是）
     */
    private Integer enableAutoJump;
    /**
     * 允许从普通阶段直接跳转到结束阶段（0不允许、1允许；默认允许）
     */
    private Integer enableJumpEnd;
    /**
     * 该阶段是否是默认值（0不是、1是）
     */
    private Integer isDefault;
    /**
     * 阶段的关联选项
     */
    private JSONArray linkOption;
    /**
     * 镜像阶段Id（仅在镜像复制时用）
     */
    @Getter(onMethod_ = {@QueryIgnore})
    private Long mirrorStageId;
    /**
     * 创建时间时间戳
     */
    private Long addTime;
    /**
     * 更新时间时间戳
     */
    private Long updateTime;
    /**
     * 删除标记
     */
    private Integer del;

    /**
     * 是否允许新建合同，阶段自动跳转此阶段
     * 0 不允许
     * 1 允许
     * null
     */
    private Integer allowCreateContractSkipStage;

    /**
     * 显式构造器
     */
    public PaasStageEntity(){
        del = 0;
    }


    public PaasStageEntity(String corpid, Long formId, Long stageProcessId, String name, String code,
                           Integer intoProportion, Integer outProportion, Integer type, Integer enable,
                           Integer sort, Integer stayLimit, Integer stayLimitTime, Integer stayLimitTimeUnit,
                           Integer enableStageWarningColor, String stageWarningColor, JSONArray executor, String preConditions,
                           Integer allowSkipStage, Integer openStatus, Integer businessRelatedStatus, JSONObject extraSetting,
                           Integer allowReactive, JSONArray allowReactiveStage, Integer enableAutoJump, Integer enableJumpEnd,
                           Integer isDefault, JSONArray linkOption, Integer allowCreateContractSkipStage) {
        this.corpid = corpid;
        this.formId = formId;
        this.stageProcessId = stageProcessId;
        this.name = name;
        this.code = code;
        this.intoProportion = intoProportion;
        this.outProportion = outProportion;
        this.type = type;
        this.enable = enable;
        this.sort = sort;
        this.stayLimit = stayLimit;
        this.stayLimitTime = stayLimitTime;
        this.stayLimitTimeUnit = stayLimitTimeUnit;
        this.enableStageWarningColor = enableStageWarningColor;
        this.stageWarningColor = stageWarningColor;
        this.executor = executor;
        this.preConditions = preConditions;
        this.allowSkipStage = allowSkipStage;
        this.openStatus = openStatus;
        this.businessRelatedStatus = businessRelatedStatus;
        this.extraSetting = extraSetting;
        this.allowReactive = allowReactive;
        this.allowReactiveStage = allowReactiveStage;
        this.enableAutoJump = enableAutoJump;
        this.enableJumpEnd = enableJumpEnd;
        this.isDefault = isDefault;
        this.linkOption = linkOption;
        this.setAddTime(DateTimeUtil.getInt());
        this.setUpdateTime(DateTimeUtil.getInt());
        this.setDel(DelEnum.NORMAL.getDel());
        this.allowCreateContractSkipStage = allowCreateContractSkipStage;
    }
}
